#ifndef __GAME_BOT_H
#define __GAME_BOT_H

#include <vector>
#include "structures.h"
#include "common.h"
#include "ruler.h"

using namespace std;

/**
 * Game bot, which internally uses several strategies
 */
class game_bot
{
protected:
	const game_settings& settings;
	const vector<unit_type>& unit_types;
	const vector<state>& states;
	const game_field& field;
	ruler calc;
	bool get_reachable_adjacent_cell(const vector<vector<int>>& distances, int x, int y, int& adj_x, int& adj_y);
	double short_shot_effect(state from, state to, state attack);
	move get_best_short_shot(vector<vector<int>> distances, state from_state);
	double long_shot_effect(state from, state attack);
	move get_best_long_shot(vector<vector<int>> distances, state from_state);
public:
	game_bot(const game_settings& _settings, const vector<unit_type>& _unit_types, const vector<state>& _states, const game_field& _field);
	move make_move(move enemy_move);
};

#endif __GAME_BOT_H